from config.settings import settings
from loguru import logger
import requests
import pandas as pd
from datetime import datetime, timedelta


class HkIndexService:
    """港股指数数据服务"""
    
    def __init__(self):
        self.base_url = settings.data_query_host

    def get_hk_index_history_data(self, codes=None, start_date=None, end_date=None):
        """
        获取港股指数历史数据
        
        Args:
            codes: 港股指数代码，可以是单个字符串或列表
            start_date: 开始日期 YYYY-MM-DD 格式
            end_date: 结束日期 YYYY-MM-DD 格式
            
        Returns:
            dict: API响应数据
        """
        try:
            # 如果没有指定codes，使用配置中的所有港股指数
            if codes is None:
                codes = list(settings.hk_index_code_config.keys())
            
            # 构建请求参数
            params = {"codes": codes}
            if start_date:
                params["start_date"] = start_date
            if end_date:
                params["end_date"] = end_date
            
            # 发送GET请求
            url = f"{self.base_url}/data_query/hk_index_history_data"
            response = requests.get(
                url,
                params=params,
                timeout=settings.request_timeout_seconds,
            )
            
            if response.status_code == 200:
                result = response.json()
                if result.get("code") == 200:
                    logger.info(f"成功获取港股指数数据，共 {len(result.get('data', []))} 条记录")
                    return result
                else:
                    logger.error(f"港股指数数据API返回错误: {result.get('message', '未知错误')}")
                    return None
            else:
                logger.error(f"港股指数数据API请求失败，状态码: {response.status_code}")
                return None
                
        except Exception as e:
            logger.exception(f"获取港股指数数据时出错: {e}")
            return None

    def get_hk_index_codes(self):
        """获取港股指数代码配置"""
        return settings.hk_index_code_config

    def get_hk_index_name(self, code):
        """根据指数代码获取指数名称"""
        return settings.hk_index_code_config.get(code, code)
